package com.domain.threads;

import java.util.List;
import java.util.concurrent.AbstractExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * Singleton, Hilo de ejecucion unico de Swing, encargado de actualizar la Interfaz Grafica, es decir, las 
 * ventanas.
 * @author Irving
 *
 */
public class EjecutorHiloUnicoInterfazGrafica extends AbstractExecutorService{

	//Almacena su propia instancia.
	private static final EjecutorHiloUnicoInterfazGrafica instance = new EjecutorHiloUnicoInterfazGrafica();
	
	//Nunca se llama al constructor externamente
	private EjecutorHiloUnicoInterfazGrafica(){};
	
	/**
	 * se obtiene la instancia unica de clase
	 * @return Instancia
	 */
	public static EjecutorHiloUnicoInterfazGrafica instance() { return instance; }
	
	/**
	 * Lanza un ejecutable recibido, apoyando en la Clase Utilidad Swing para decidir 
	 * si el "EventQeue" de Swing se encuentra disponible, lanzando entonces el ejecutable;
	 * en caso contrario, lo coloca en la lista de espera para ejecutarlo posteriormente.
	 * @see  UtilidadSwing
	 * @see java.util.concurrent.Executor#execute(java.lang.Runnable)
	 */
	public void execute(Runnable r){
		if(UtilidadSwing.isEventDispatchThread())
			r.run();
		else
			UtilidadSwing.invokeLater(r);
	}

	//El resto de los metodos no se implementan..... 
	@Override
	public boolean awaitTermination(long timeout, TimeUnit unit)
			throws InterruptedException {
		return false;
	}

	@Override
	public boolean isShutdown() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean isTerminated() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void shutdown() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public List<Runnable> shutdownNow() {
		// TODO Auto-generated method stub
		return null;
	}
	
}
